home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / vbdatabs / ehandler.h < prev    next >
C/C++ Source or Header  |  1999-03-30  |  10KB  |  231 lines

  1. // ------------------------------- //
  2. // -------- Start of File -------- //
  3. // ------------------------------- //
  4. // ----------------------------------------------------------- //
  5. // C++ Header File Name: ehandler.h
  6. // Compiler Used: MSVC40, DJGPP 2.7.2.1, GCC 2.7.2.1, HP CPP 10.24
  7. // Produced By: Doug Gaer    
  8. // File Creation Date: 02/14/1996  
  9. // Date Last Modified: 03/30/1999
  10. // Copyright (c) 1997 Douglas M. Gaer
  11. // ----------------------------------------------------------- // 
  12. // ---------- Include File Description and Details  ---------- // 
  13. // ----------------------------------------------------------- // 
  14. /*
  15. The VBD C++ classes are copyright (c) 1997, by Douglas M. Gaer.
  16. All those who put this code or its derivatives in a commercial
  17. product MUST mention this copyright in their documentation for
  18. users of the products in which this code or its derivative
  19. classes are used. Otherwise, you have the freedom to redistribute
  20. verbatim copies of this source code, adapt it to your specific
  21. needs, or improve the code and release your improvements to the
  22. public provided that the modified files carry prominent notices
  23. stating that you changed the files and the date of any change.
  24.  
  25. THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND.
  26. THE ENTIRE RISK OF THE QUALITY AND PERFORMANCE OF THIS SOFTWARE
  27. IS WITH YOU. SHOULD ANY ELEMENT OF THIS SOFTWARE PROVE DEFECTIVE,
  28. YOU WILL ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR
  29. CORRECTION.
  30.  
  31. The Ehandler class is used to catch program exceptions that
  32. occur at run-time. This implementation can be used with or
  33. without C++ built-in exception handling. If C++ exception
  34. handling is not enabled with the CPP_EXCEPTIONS macro, then
  35. the EHandler class can be used to display program errors,
  36. exit the program, or trap a program error with a user defined
  37. Action Function.
  38.  
  39. Changes: 
  40. ================================================================
  41. 12/16/1997 - Combined the Console, Curses, and wxWindows version,
  42. using the CONSOLE, CURSES, and wxWINDOWS macros to conditionally
  43. compile.
  44. Added by: Doug Gaer
  45.  
  46. 12/16/1997 - Added the wxincs.h file for wxWindows include files.
  47. Added by: Doug Gaer
  48.  
  49. 02/04/1998 - Added CParseError, CNoObjectsExist and CBadClassID
  50. exceptions.
  51. Added by: Doug Gaer
  52.  
  53. 02/06/1998 - Added CSyncError exception.
  54. Added by: Doug Gaer
  55.  
  56. 03/13/1998 - Added CAccessViolation exception.
  57. Added by: Doug Gaer
  58.  
  59. 03/13/1998 - Added CAccessViolation exception.
  60. Added by: Doug Gaer
  61.  
  62. 09/01/1998 - Added CChecksumError exception.
  63. Added by: Doug Gaer
  64.  
  65. 03/30/1999 - Changed the __wxWINDOWS__ macro to __wxWIN168B and
  66. added the __wxWIN201__ macro for wxWindows version 2.0.1
  67. Changed by: Doug Gaer
  68. ================================================================
  69. */
  70. // ----------------------------------------------------------- //   
  71. #ifndef __EHANDLER_HPP
  72. #define __EHANDLER_HPP
  73.  
  74. // Macro used turn on C++'s exception handling in applications
  75. // #ifndef CPP_EXCEPTIONS
  76. // #define CPP_EXCEPTIONS
  77. // #endif
  78.  
  79. // Macros used to select display types for error messaging
  80. // ===========================================================
  81. // #ifndef __wxWIN168B__ 
  82. // #define __wxWIN168B__ // wxWindows 1.68B GUI 
  83. // #endif
  84.  
  85. // #ifndef __wxWIN201__ 
  86. // #define __wxWIN201__ // wxWindows 2.0.1 GUI 
  87. // #endif
  88.  
  89. // #ifndef __CONSOLE__ 
  90. // #define __CONSOLE__   // Console (stdout) display
  91. // #endif
  92.  
  93. // #ifndef __CURSES__
  94. // #define __CURSES__    // Curses port for terminal sessions
  95. // #endif
  96. // ===========================================================
  97.  
  98. const int FatalErrorLevel = 1; // Return value to Operating System
  99. const int DisplayOn = 1;       // Display the exception
  100. const int DisplayOff = 0;      // Do not display the exception
  101. const int MessageCount = 36;   // Number of exception messages
  102.  
  103. typedef void (*AF)(); // Function pointer for action function
  104.  
  105. class EHandler
  106. {
  107. public:
  108.   enum { // Exception Handler error codes
  109.     None,              // No exception 
  110.     FileNotReady,      // File not ready (failed or closed file)
  111.     FileNotWriteable,  // Could not write to file 
  112.     ReadOnlyFile,      // Trying to write to read-only file
  113.     FileNotOpenError,  // Trying to use a closed file
  114.     FileCreationError, // Error creating file
  115.     FileOpenError,     // Error opening file
  116.     FileCloseError,    // Error closing file
  117.     FileSeekError,     // Error seeking in file
  118.     FileReadError,     // Error reading file
  119.     FileWriteError,    // Error writing to file
  120.     EOFError,          // Unexpected end of file
  121.     WrongFileType,     // Wrong file type
  122.     FileCorrupt,       // File corrupted
  123.     FileExists,        // File already exists
  124.     NoFileExists,      // No such file exists
  125.     PathError,         // Invalid path
  126.     DanglingPtr,       // Dangling reference counted pointer
  127.     NullPtr,           // Accessing a null pointer 
  128.     CacheFull,         // Cache full
  129.     StkFull,           // Stack full
  130.     StkEmpty,          // Stack empty
  131.     AssertError,       // Assertion failed
  132.     NoDatabaseOpen,    // No database open
  133.     ObjectExists,      // Object already exists
  134.     BadObjectAddress,  // Bad object address
  135.     BadReference,      // Bad Reference
  136.     DivideByZero,      // Divide By Zero Error
  137.     OverFlow,          // Math overflow
  138.     UnderFlow,         // Math under-flow
  139.     ParseError,        // Parse error
  140.     NoObjectsExist,    // No objects exist
  141.     BadClassID,        // Wrong object type
  142.     SyncError,         // Synchronization Error
  143.     AccessViolation,   // Access Violation
  144.     ChecksumError      // Checksum Error
  145.   };
  146.  
  147.   enum { // Exception Handler error levels
  148.     FATAL = 0x0010,    // Fatal error, terminate program immediately
  149.     DISPLAY = 0x0020   // Dummy handler that does nothing
  150.   };
  151.     
  152. public:
  153.   EHandler() { ExceptionCode = None; }
  154.   virtual ~EHandler();
  155.  
  156. public:
  157.   virtual void DisplayException();
  158.   virtual void DisplayException(int ECode);
  159.  
  160.   // Display exception, exit the program, do nothing, or handle exception
  161.   virtual void SignalException 
  162.   (int ECode, int Level = FATAL, int DisplayError = DisplayOn);
  163.  
  164.   // Display a program message
  165.   virtual void Message
  166.   (const char *mesg1=" ", const char *mesg2=" ", const char *mesg3=" ");
  167.   
  168.   // Exception handler used to handle user defined routines to trap
  169.   // a program error 
  170.   void TrapException(AF ActionFunction);
  171.   
  172.   void SetException(int ECode) { ExceptionCode = ECode; }
  173.   int Exception() { return ExceptionCode; }
  174.   void ClearException() { ExceptionCode = None; }
  175.  
  176. protected:
  177.   virtual void Terminate();
  178.   int ExceptionCode;  
  179. };
  180.  
  181. extern EHandler ExceptionHandler;
  182. extern EHandler *Error; // Global exception handler pointer
  183.  
  184. #ifdef CPP_EXCEPTIONS
  185. // Class declarations for exceptions representing program errors. 
  186. // This implementation is provided for use C++'s built-in exception
  187. // handling routines.
  188. class CNone : public EHandler { };              // No exception
  189. class CFileNotReady : public EHandler { };      // File not ready
  190. class CFileNotWriteable : public EHandler { };  // Could not write to file
  191. class CReadOnlyFile : public EHandler { };      // Writing to read-only file
  192. class CFileNotOpenError : public EHandler { };  // Using a closed file
  193. class CFileCreationError : public EHandler { }; // Error creating file
  194. class CFileOpenError : public EHandler { };     // Error opening file
  195. class CFileCloseError : public EHandler { };    // Error closing file
  196. class CFileSeekError : public EHandler { };     // Error seeking in file
  197. class CFileReadError : public EHandler { };     // Error reading file
  198. class CFileWriteError : public EHandler { };    // Error writing to file
  199. class CEOFError : public EHandler { };          // Unexpected end of file
  200. class CWrongFileType : public EHandler { };     // Wrong file type
  201. class CFileCorrupt : public EHandler { };       // File corrupted
  202. class CFileExists : public EHandler { };        // File already exists
  203. class CNoFileExists : public EHandler { };      // No such file exists
  204. class CPathError : public EHandler { };         //